/* Universidad del Valle de Guatemala
 * Laboratorio 3
 * Mariana Castillo
 * Luis Alburez
 * Jose Pablo Rodriguez
 * Julio Maldonado
 * Jose de La Cruz
 * Descripcion: divide el array en arrays mas pequenos y los ordena de menor a mayor 
 *
 * Fuentes de consulta: 
 * jc Java Quicksort [en linea] [27/07/2013] consultado en:
 * http://puntocomnoesunlenguaje.blogspot.com/2012/12/java-quicksort.html?showComment=1368287517706#c6868356752854799156
 */
package hoja3;

public class QuickSort{

	int[] vec;
	int left =0;
	int right =0;
	int temporal=0;
	
	public QuickSort(int[] v, int right){
		this.vec=v;
		this.right= ((vec.length) -1);
		
	}


	public static void quicksort(int vec[], int left, int right) {
	
	  int pivote=vec[left]; 			// el primer elemento es el pivote
	  int a=left; 						// a realiza la busqueda de izquierda a derecha empezando en 0
	  int b=right; 						// b realiza la busqueda de derecha a izquierda empezando en el final
	  int temp;
	 
	  while(a<b){            						// revisa que las busquedas no se crucen
		 while(vec[a]<=pivote && a<b) a++; 		// busca elemento mayor al pivote
			while(vec[b]>pivote) b--;         	// busca elemento menor el pivote
				if (a<b) {                      	// en caso de que no haya cruce      
				temp= vec[a];                 			 //intercambio de elementos
				vec[a]=vec[b];
				vec[b]=temp;
				}
			
		
	}
	   vec[left]=vec[b]; 		// se colocan los menores en la izquierda y los mayores en la derecha
	   vec[b]=pivote; 			// 
	   if(left< (b-1)){			//si la izquierda es menor que el elemento de la derecha
		  quicksort(vec, left, b-1); // se coloca en la izquierda
		  }
	   if(b+1 < right){			//si el elemento es menor que otro en la derecha
		  quicksort(vec ,b+1, right); // se ordena en el lado derecho
	}

    }
}